def index():
	if session.pid is not None:
		redirect(URL('show'))
	response.name_bar = 'Projetos'
	projetos = db(db.projeto).select()
	return dict(projetos=projetos)

@auth.requires_login()
def delete_funcao():
	ef_id = int(request.args[0])
	projeto = db(db.projeto.id==session.pid).select().first()
	projeto.esforco_funcao.remove(ef_id)
	projeto.update_record()
	db(db.esforco_funcao.id==ef_id).delete()
	redirect(URL('show'))
	return dict()

@auth.requires_login()
def update_funcao():
	fid = int(request.args[0])
	response.name_bar = 'Editando função %s de %s' % (db.esforco_funcao[fid].nome,
			db.projeto[session.pid].nome)
	form = crud.update(db.esforco_funcao, fid, next=URL('show'), deletable=False)
	return dict(form=form)

@auth.requires_login()
def update_taxa():
	response.name_bar = 'Editando Taxa de %s' % db.projeto[session.pid].nome
	form = crud.update(db.esforco_taxa,
			int(db(db.projeto.id==session.pid).select().first().esforco_taxa),
			next=URL('show'), deletable=False)
	return dict(form=form)

@auth.requires_login()
def new():
	response.name_bar = 'Nova função para %s' % (
			db(db.projeto.id==session.pid).select().first().nome)
	form = SQLFORM(db.esforco_funcao, submit_button='Adicionar',
			ignore_rw=True)
	if form.process().accepted:
		response.flash = 'Função criada com sucesso'
		df_id = db.decomposicao_funcao.insert(
				nome=db(db.esforco_funcao.id==form.vars.id).select().first().nome,
				pessimo=0, bom=0, otimo=0, precoporlinha=0, linhapormes=0,)
		projeto = db(db.projeto.id==session.pid).select().first()
		projeto.esforco_funcao.append(form.vars.id)
		projeto.decomposicao_funcao.append(df_id)
		projeto.update_record()
		redirect(URL('show'))
	return dict(form=form)

@auth.requires_login()
def show():
	fmt = '%.2f'
	if request.vars.pid is not None:
		session.pid = request.vars.pid
	if session.pid is None:
		redirect(URL('index'))
	projeto = db(db.projeto.id==session.pid).select().first()
	response.name_bar = projeto.nome
	ef = db.esforco_funcao
	if projeto.esforco_taxa is None:
		projeto.esforco_taxa = db.esforco_taxa.insert(er=0,
				projeto=0, implementacao=0, teste=0)
		projeto.update_record()
	if projeto.esforco_funcao is None:
		projeto.esforco_funcao = []
		projeto.update_record()
	funcoes_thead = [ef.nome.label, ef.er.label, ef.projeto.label,
			ef.implementacao.label, ef.teste.label, 'Total']
	funcoes_tbody = []
	funcoes_sum = [0, 0, 0, 0, 0]
	for i in projeto.esforco_funcao:
		f = db.esforco_funcao[i]
		atual = (f.er, f.projeto, f.implementacao, f.teste)
		total = sum(atual)
		atual += (total,)
		funcoes_sum = [funcoes_sum[i] + atual[i] for i in xrange(len(funcoes_sum))]
		funcoes_tbody.append((f.nome, fmt % f.er, fmt % f.projeto,
			fmt % f.implementacao, fmt % f.teste, fmt % total, f.id))
	f = projeto.esforco_taxa
	funcoes_taxa = (f.er, f.projeto, f.implementacao, f.teste)
	funcoes_custo = [funcoes_sum[i] * funcoes_taxa[i] for i in xrange(len(funcoes_taxa))]
	funcoes_custo += [sum(funcoes_custo)]
	return dict(projeto=projeto,
			funcoes_thead=funcoes_thead,
			funcoes_tbody=funcoes_tbody,
			funcoes_sum=[fmt % s for s in funcoes_sum],
			funcoes_custo=[fmt % s for s in funcoes_custo],
			funcoes_taxa=[fmt % s for s in funcoes_taxa],
			)
